package com.woniuxy.mq;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author author
 * @Create 2024-02-29 15:40
 */
public class Consumer {

    public static void main(String[] args) throws IOException, TimeoutException {
        //生产者发送消息
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接参数
        factory.setHost("192.168.80.84");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        //设置虚拟主机：就是MySQL的db1,db2
        factory.setVirtualHost("/");
        //创建连接对象
        Connection connection = factory.newConnection();
        //创建通信管道对象
        Channel channel = connection.createChannel();
        //队列声明：创建并连接到指定的队列
        //String queue, 队列名称
        // boolean durable,是否持久化，一般使用true:重启mq服务，不会删除队列
        // boolean exclusive,是否独占，一般使用false，如果是独占队列，只有当前连接才能访问队列
        // boolean autoDelete,是否自动删除，一般使用false，如果自动删除，队列中的消息处理完，队列也删除
        // Map<String, Object> arguments，队列其他属性
        channel.queueDeclare("queuehelloword", true, false, false, null);
        //消费接收处理消息
        // String queue,连接到哪个队列
        // boolean autoAck,是否自动确认，入门使用ture:接收到消息服务器立即删除。正式的项目使用false手动确认，用户处理没有问题，才回从队列中删除消息
        // Consumer callback：回调函数，接收消息以后要执行的业务代码
        channel.basicConsume("queuehelloword", true,new DefaultConsumer(channel){
            //String consumerTag, 消费标记
            // Envelope envelope, 信封
            // AMQP.BasicProperties properties,消息属性
            // byte[] body，消息体，消息正文
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag:"+consumerTag);
                System.out.println("envelope:"+envelope);
                System.out.println("properties:"+properties);
                System.out.println("body:"+new String(body));
                System.out.println("执行业务处理，发邮件，发短信");
                System.out.println("------------------------");
            }
        });
    }
}
